<?php

namespace App\Http\Controllers;

use App\Models\BlogUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\URL;
use function Symfony\Component\Mime\Header\all;

class UserController extends Controller
{
    /*【】依赖注入*/
    public function index(Request $request, $id, $uid, TaskController $task){
//        return $request->input('name');   //得到参数name的值
//        return $request->all();   //得到路径所有参数
//        return $id.$uid;      //返回路径参数
//        return $request->path();  //得到路由的参数，uri
//        return $request->url();    //得到域名+uri
//        return $request->fullUrl();   //得到完整的url，包含域名和所有参数
//        return $request->is('api/user/*');   //判断是否在这个路径下
//        return $request->isMethod('get');   //判断请求类型
//        return $task->form();   //获取其他控制器的方法

//        return $request->input('select.1');
//        return $request->input('select.1.b');
//        return $request->boolean('name');  //返回布尔值
//        return $request->ip();   //返回IP地址
//        return $request->only('sex');   //只接收固定参数
//        return $request->except(['name']);  //排除不要的参数
//        return $request->has('name');  //判断参数是否存在,值可以为空
//        return $request->has(['name','sex']);  //判断参数是否全部存在
//        return $request->hasAny(['name','sex']);  //判断参数只有一个存在，就返回true
//        return $request->filled('name');  //判断参数存在，并且不为空
//        return $request->missing('name');  //判断参数不存在（为空也不行）

        //不适用依赖注入，也可以使用助手函数  request()
//        return request()->input();

    }

    public function view(){
        return view('view');
    }

    /*【】生成URL*/
    public function url(){
//        $user = BlogUser::find(1);
//        return url('user/'.$user->id);   //url助手函数，可以生成指定的url地址
//        return url()->current();        //得到当前url，不带参数
//        return url()->full();          //得到当前url，带参数
//        return url()->previous();     //得到上一个url

        //使用route()方法，生成命名路由的url
//        return route('url.ids',['ids' => 5]);
        //或者直接使用控制器，也可以返回url
//        return action([UserController::class,'index'],['id' => 6,'uid'=>2]);

        //生成一个签名url，在url后面追加一个哈希签名字符串，用于验证
//        return URL::signedRoute('url.ids',['ids' => 5]);
        //验证哈希签名
//        return \request()->hasValidSignature();

    }

    //使用Cookie
    public function cookies(){
//        return $_COOKIE['laravel_session'];
//        return request()->cookie('laravel_session');
//        return Cookie::get('laravel_session');
//        return Cookie::has('laravel_session');  // 判断cookie是否存在

        //写入cookie  Cookie::queue()
//        Cookie::queue('age',100,10);

        //使用助手函数cookie()来创建cookie实例，然后再写入，更加灵活
//        $cookie = cookie('gender','男',10);
//        Cookie::queue($cookie);

        //中间件添加键名，即可不加密添加cookie
//        Cookie::queue('name','Mr.Zhou',10);

    }

    //使用Session
    public function sess(){
//        return \request()->session()->all();  //获取当前服务器存储的session
//        return \request()->session()->get('_token');  //获取某一个session
//        return Session::get('_token');
        // 参数2，闭包设置默认值
//        return Session::get('name',function (){
//            return 'no session name';
//        });

        //助手函数
//        return \session('_token');

        //判断是否存在session有两种方案，都支持request()方式
//        return Session::has('_token');  //判断是否存在且不为null
//        return Session::exists('_token');  //判断是否存在，即使是null

//        Session::put('name','Mr.Lee');  //存储session
//        return Session::get('name');  //获取单条session

        //闪存数据，存储的session只能被获取一次，获取后自动删除  flash()
//        Session::flash('name','Mr.Lee');
//        return Session::get('name');
        //闪存数据，本次请求不删除数据，下一次请求再删除  reflash()
//        Session::reflash();
//        return Session::get('name');

        //删除一条或多条缓存数据
//        Session::forget('name');  //Session::forget(['name',''])
//        return Session::get('name');

        //删除一条数据并返回
//        Session::pull('info');
        //删除所有数据
//        Session::flush();

        //重新生成SessionID
//        Session::regenerate();
        //获取SessionID
//        return Cookie::get('laravel_session');

    }

}
